package com.learn._2list;

public interface List<T> {

    //查询相关：三种基本接口，根据idx查元素， 根据元素查idx，  是否存在元素

    //查询:根据idx查元素       时间复杂度 1
    T get(int idx);

    //查询 根据元素查idx         时间复杂度  n  平均n/2
    int indexOf(T obj);

    //查询 是否存在 ,重用indexOf 或者自己写            同indexof
    boolean contains(T obj);

    boolean empty();

    int size();

    //增加元素， 尾部增， 下标增

    //增加元素：尾部增           时间复杂度 1
    void add(T obj);
    //增加元素，下标增           时间复杂度 n 平均 n/2 但是java里，提供了内存的直接整块复制的技术，因此实际是会比这个快的，快在材质不在算法
    void add(int idx,T obj);

    //删除元素 ： 直接删，下标删

    //删除元素： 直接删          时间复杂度   n
    void remove(T obj);
    //删除元素 ： 下标删           时间复杂度  n/2 但是java里，提供了内存的直接整块复制的技术，因此实际是会比这个快的，快在材质不在算法
   void remove(int idx);

    //修改元素                        时间复杂度 1
    void set(int idx, T obj);

    // 清理
    void clear();
}
